import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

// 使用 Java标准库 HttpClient 直接访问HTTP或HTTPS服务器
public class MyHttpClient {
    public static void main(String[] args) throws IOException, InterruptedException {h
        // 创建 HttpClient 对象，创建实例的时候，需要使用工厂方法
        HttpClient client = HttpClient.newHttpClient();
        // 创建 HttpRequest 表示一个 HTTP 请求 [链式调用]
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://www.sogou.com"))
                .GET()
                .header("Use-Agent","xxx")
                .build();

        // 发送请求，获取响应.  send 执行后就会阻塞等待，直到响应返回回来
        // [send 同步发送：发送请求后，就等待，我主动关注响应返回] [sendAsync 异步发送：发送请求后，就不管了，等响应回来了，你通知我]
        // 本质区别在于 "结果，谁负责关注"，同步异步与IO直接相关. 需要更高的性能 更好的并发，优先考虑异步；为了让代码更简单，更方便实现，更不容易出错，考虑同步
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.statusCode());
        System.out.println(response.headers());
        System.out.println(response.body());
    }
}